// bomb.js - 炸弹定时器

/**
 * Bomb 构造函数 - 表示一个定时炸弹
 * @param {string} name - 炸弹名称，用于标识不同的炸弹实例
 */
function Bomb(name) {
    this.name = name;        // 炸弹名称
    this.timerId = null;     // 定时器ID，用于取消定时器
    this.isArmed = false;    // 是否已启动
}

/**
 * 启动炸弹定时器
 * 3秒钟后爆炸
 */
Bomb.prototype.start = function() {
    // 如果已经启动，先取消之前的定时器
    if (this.isArmed) {
        console.log(`⚠️  ${this.name}: 已经处于启动状态，重新设置定时器`);
        this.clear();
    }
    
    console.log(`⏱️  ${this.name}: 定时器启动，3秒后爆炸！`);
    
    // 设置3秒后的定时器
    this.timerId = setTimeout(() => {
        console.log(`💥 ${this.name}: BOOM! 炸弹爆炸了！！！`);
        this.isArmed = false;
    }, 3000);
    
    this.isArmed = true;
};

/**
 * 取消炸弹定时器（拆弹）
 */
Bomb.prototype.clear = function() {
    if (this.timerId) {
        clearTimeout(this.timerId);
        this.timerId = null;
        this.isArmed = false;
        console.log(`🛑 ${this.name}: 定时器已取消，炸弹被成功拆除！`);
    } else {
        console.log(`ℹ️  ${this.name}: 没有活动的定时器需要取消`);
    }
};

/**
 * 获取炸弹当前状态
 */
Bomb.prototype.getStatus = function() {
    return {
        name: this.name,
        isArmed: this.isArmed,
        hasTimer: this.timerId !== null
    };
};

/**
 * 主程序逻辑
 */
function main() {
    console.log('💣 炸弹定时器测试程序');
    console.log('='.repeat(50));
    
    // 实例化两个定时炸弹对象
    const b1 = new Bomb('炸弹一号');
    const b2 = new Bomb('炸弹二号');
    
    console.log('✅ 已创建两个炸弹实例：');
    console.log(`   - ${b1.name}`);
    console.log(`   - ${b2.name}`);
    console.log('');
    
    // b1 调用 start 方法
    console.log('--- 启动炸弹 ---');
    b1.start();
    
    // b2 调用 start 方法
    b2.start();
    
    console.log('\n⏰ 等待1秒钟后对炸弹二号进行拆弹操作...\n');
    
    // b2 在 1 秒钟之后，调用 clear 方法
    setTimeout(() => {
        console.log('--- 拆弹操作 ---');
        b2.clear();
        
        // 显示当前状态
        console.log(`\n📊 当前状态:`);
        console.log(`   ${b1.name} 状态: ${b1.isArmed ? '已启动' : '已停止'}`);
        console.log(`   ${b2.name} 状态: ${b2.isArmed ? '已启动' : '已停止'}`);
        
    }, 1000);
    
    // 添加额外的监控，显示3秒后的情况
    setTimeout(() => {
        console.log('\n' + '='.repeat(50));
        console.log('🔚 测试结束');
        console.log('='.repeat(50));
        
        // 验证最终状态
        console.log(`🎯 最终结果:`);
        console.log(`   ${b1.name}: ${b1.isArmed ? '已爆炸' : '未爆炸'}`);
        console.log(`   ${b2.name}: ${b2.isArmed ? '已爆炸' : '已被拆除'}`);
        
    }, 4000);
}

// 启动主程序
main();

// 处理程序中断 (Ctrl+C)
process.on('SIGINT', () => {
    console.log('\n\n👋 程序被用户中断');
    process.exit(0);
});